<table class="configuration table table-bordered">
    <thead>
        <tr>
            <th class="text-left" style="width: 20%">Key</th>
            <th class="text-left" style="width: 15%">Default</th>
            <th class="text-left" style="width: 10%">Type</th>
            <th class="text-left" style="width: 55%">Description</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><h5>execution.batch.adaptive.auto-parallelism.avg-data-volume-per-task</h5></td>
            <td style="word-wrap: break-word;">16 mb</td>
            <td>MemorySize</td>
            <td>The average size of data volume to expect each task instance to process if <code class="highlighter-rouge">jobmanager.scheduler</code> has been set to <code class="highlighter-rouge">AdaptiveBatch</code>. Note that when data skew occurs or the decided parallelism reaches the <code class="highlighter-rouge">execution.batch.adaptive.auto-parallelism.max-parallelism</code> (due to too much data), the data actually processed by some tasks may far exceed this value.</td>
        </tr>
        <tr>
            <td><h5>execution.batch.adaptive.auto-parallelism.default-source-parallelism</h5></td>
            <td style="word-wrap: break-word;">(none)</td>
            <td>Integer</td>
            <td>The default parallelism of source vertices or the upper bound of source parallelism to set adaptively if <code class="highlighter-rouge">jobmanager.scheduler</code> has been set to <code class="highlighter-rouge">AdaptiveBatch</code>. Note that <code class="highlighter-rouge">execution.batch.adaptive.auto-parallelism.max-parallelism</code> will be used if this configuration is not configured. If <code class="highlighter-rouge">execution.batch.adaptive.auto-parallelism.max-parallelism</code> is not set either, then the default parallelism set via <code class="highlighter-rouge">parallelism.default</code> will be used instead.</td>
        </tr>
        <tr>
            <td><h5>execution.batch.adaptive.auto-parallelism.enabled</h5></td>
            <td style="word-wrap: break-word;">true</td>
            <td>Boolean</td>
            <td>If true, Flink will automatically decide the parallelism of operators in batch jobs.</td>
        </tr>
        <tr>
            <td><h5>execution.batch.adaptive.auto-parallelism.max-parallelism</h5></td>
            <td style="word-wrap: break-word;">128</td>
            <td>Integer</td>
            <td>The upper bound of allowed parallelism to set adaptively if <code class="highlighter-rouge">jobmanager.scheduler</code> has been set to <code class="highlighter-rouge">AdaptiveBatch</code></td>
        </tr>
        <tr>
            <td><h5>execution.batch.adaptive.auto-parallelism.min-parallelism</h5></td>
            <td style="word-wrap: break-word;">1</td>
            <td>Integer</td>
            <td>The lower bound of allowed parallelism to set adaptively if <code class="highlighter-rouge">jobmanager.scheduler</code> has been set to <code class="highlighter-rouge">AdaptiveBatch</code></td>
        </tr>
        <tr>
            <td><h5>execution.batch.job-recovery.enabled</h5></td>
            <td style="word-wrap: break-word;">false</td>
            <td>Boolean</td>
            <td>A flag to enable or disable the job recovery. If enabled, batch jobs can resume with previously generated intermediate results after job master restarts due to failures, thereby preserving the progress.</td>
        </tr>
        <tr>
            <td><h5>execution.batch.job-recovery.previous-worker.recovery.timeout</h5></td>
            <td style="word-wrap: break-word;">30 s</td>
            <td>Duration</td>
            <td>The timeout for a new job master to wait for the previous worker to reconnect.A reconnected worker will transmit the details of its produced intermediate results to the new job master, enabling the job master to reuse these results.</td>
        </tr>
        <tr>
            <td><h5>execution.batch.job-recovery.snapshot.min-pause</h5></td>
            <td style="word-wrap: break-word;">3 min</td>
            <td>Duration</td>
            <td>The minimal pause between snapshots taken by operator coordinator or other components. It is used to avoid performance degradation due to excessive snapshot frequency.</td>
        </tr>
        <tr>
            <td><h5>execution.batch.speculative.block-slow-node-duration</h5></td>
            <td style="word-wrap: break-word;">1 min</td>
            <td>Duration</td>
            <td>Controls how long an detected slow node should be blocked for.</td>
        </tr>
        <tr>
            <td><h5>execution.batch.speculative.enabled</h5></td>
            <td style="word-wrap: break-word;">false</td>
            <td>Boolean</td>
            <td>Controls whether to enable speculative execution.</td>
        </tr>
        <tr>
            <td><h5>execution.batch.speculative.max-concurrent-executions</h5></td>
            <td style="word-wrap: break-word;">2</td>
            <td>Integer</td>
            <td>Controls the maximum number of execution attempts of each operator that can execute concurrently, including the original one and speculative ones.</td>
        </tr>
    </tbody>
</table>
